package cn.edu.zafu.bigdata.bd121.cube;

import java.util.Objects;

/**
 * 题目描述：定义一个长方体类并实现相等性判断
 * 设计一个表示长方体的类Cube，包含三个属性length、width和height，分别表示长方体的长、宽和高。重写equals方法，使得当两个长方体的长、宽和高均相等时，判断它们为相等。
 * 具体要求：
 * 1.定义属性：
 * 类Cube中包含double类型的属性length、width和height，分别表示长方体的长、宽和高。
 * 2.构造方法：
 * 提供一个带参构造方法Cube(double length, double width, double height)，用于初始化长方体的长、宽和高。
 * 3.获取方法：
 * 为每个属性提供对应的getLength()、getWidth()和getHeight()方法，以便获取长方体的长、宽和高。
 * 4.重写equals方法：
 * 重写equals(Object obj)方法，定义长方体的相等性判断。
 * 当两个Cube对象的length、width和height属性值都相等时，equals方法返回true，否则返回false。
 * 注意：在实现equals方法时，需要先判断是否为同一对象，是否为空或类型不同等情况。
 * 5.测试用例：
 * 编写一个测试方法，创建若干个Cube对象，并测试不同对象间的相等性。
 * 验证当两个长方体的长、宽和高相等时equals方法返回true，否则返回false。
 *
 * @author 202211090121
 */
public class Cube {

    /**
     * 长方体的长
     */
    private double length;

    /**
     * 长方体的宽
     */
    private double width;

    /**
     * 长方体的高
     */
    private double height;

    // 重写equals和hashCode方法

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (!(o instanceof Cube cube)) {
            return false;
        }
        return Double.compare(length, cube.length) == 0 && Double.compare(width, cube.width) == 0 && Double.compare(height, cube.height) == 0;
    }

    @Override
    public int hashCode() {
        return Objects.hash(length, width, height);
    }


    //region java bean

    public Cube(double length, double width, double height) {
        this.length = length;
        this.width = width;
        this.height = height;
    }

    public double getLength() {
        return length;
    }

    public void setLength(double length) {
        this.length = length;
    }

    public double getWidth() {
        return width;
    }

    public void setWidth(double width) {
        this.width = width;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    //endregion
}
